﻿/// <reference path="jquery-1.7.2.js" />
(function ($) {
    $.fn.SparrowLayout = function (options) {
        var defaults =
        {
            topHeight: 70,
            bottomHeight: 40,
            leftWidth: 200,
            heightDiff: -38,
            height: '100%',
            allowLeftCollapse: true,
            space: 4
        };
        $.extend(defaults, options);
        var m =
        {
            onInit: function () {
                $(".l-layout-header-toggle", m.layout).hover(
                    function () {
                        $(this).addClass("l-layout-header-toggle-over");
                    },
                    function () {
                        $(this).removeClass("l-layout-header-toggle-over");
                    }
                );
                $(".l-layout-header-toggle", m.left).click(function () {
                    m.setLeftCollapse(true);
                }
                );

                m.middleTop = 0;
                if (m.top) {
                    m.middleTop = m.top.height();
                    m.middleTop += parseInt(m.top.css("borderTopWidth"))
                    m.middleTop += parseInt(m.top.css("borderBottomWidth"))
                    m.middleTop += defaults.space;
                }
                if (m.left) {
                    m.left.css({ top: m.middleTop });
                    m.leftCollapse.css({ top: m.middleTop });
                    m.left.css({ left: 0 });
                }
                if (m.center) {
                    m.center.css({ top: m.middleTop });
                }
                m.onReSize();
            },
            setCollapse: function () {
                m.leftCollapse.hover(
                    function () {
                        $(this).addClass("l-layout-collapse-left-over")
                    }, function () {
                        $(this).removeClass("l-layout-collapse-left-over")
                    }
                );
                m.leftCollapse.toggle.hover(function () {
                    $(this).addClass("l-layout-collapse-left-toggle-over");
                }, function () {
                    $(this).removeClass("l-layout-collapse-left-toggle-over");
                });

                //                m.leftCollapse.toggle.click(function () {
                //                    m.setLeftCollapse(false);
                //                });

                m.leftCollapse.click(function () {
                    m.setLeftCollapse(false);
                });

            },
            setLeftCollapse: function (isCollapse) {
                if (!m.left) {
                    return;
                }
                m.isLeftCollapse = isCollapse;
                if (m.isLeftCollapse) {
                    m.leftCollapse.show();
                    m.left.hide();
                }
                else {
                    m.leftCollapse.hide();
                    m.left.show();
                }
                m.onReSize();
            },
            onReSize: function () {
                var oldH = m.layout.height();
                var newH = 0;
                var windowH = $(window).height();
                windowH = $(window).height();
                var parentHeight = null;
                if (typeof (defaults.height) == "string" && defaults.height.indexOf('%') > 0) {
                    var layoutParent = $('body'); // m.layout.parent();
                    //parentHeight = layoutParent.height();
                    //newH = parentHeight * parseFloat(defaults.height) * 0.01;
                    //                    if (layoutParent[0].tagName.toLocaleLowerCase() == "body") {
                    newH = windowH - (m.layout.offset().top - parseInt(layoutParent.css('paddingTop')));
                    newH -= parseInt(defaults.bottomHeight);
                    //                    }
                }
                else {
                    newH = parseInt(defaults.height);
                }
                //newH += defaults.heightDiff;
                m.layout.height(newH);
                m.layoutHeight = m.layout.height();
                m.middleHeight = m.layout.height();
                m.middleHeight -= 2;
                if (m.left) {
                    m.leftCollapse.height(m.middleHeight);
                    m.left.height(m.middleHeight);
                    m.left.menu.height(m.left.height() - m.left.header.height());
                }
                m.center.height(m.middleHeight);

                m.layout.width($(window).width() - 10);
                m.middleWidth = m.layout.width();
                if (m.top) {
                    m.middleHeight -= m.top.height();
                    m.middleHeight -= parseInt(m.top.css("borderTopWidth"));
                    m.middleHeight -= parseInt(m.top.css("borderBottomWidth"));
                    m.middleHeight -= defaults.space;
                }
                if (m.bottom) {
                    m.middleHeight -= m.bottom.height();
                    m.middleHeight -= parseInt(m.bottom.css('borderTopWidth'));
                    m.middleHeight -= parseInt(m.bottom.css('borderBottomWidth'));
                    m.middleHeight -= defaults.space;
                }

                if (m.center) {
                    m.centerWidth = m.middleWidth;
                    m.centerLeft = 0;
                    if (m.left) {
                        if (m.isLeftCollapse) {
                            m.centerWidth -= m.leftCollapse.width();
                            m.centerWidth -= parseInt(m.leftCollapse.css('borderLeftWidth'));
                            m.centerWidth -= parseInt(m.leftCollapse.css('borderRightWidth'));
                            m.centerWidth -= parseInt(m.leftCollapse.css('left'));
                            m.centerWidth -= defaults.space;
                            m.centerLeft += m.leftCollapse.width();
                            m.centerLeft += parseInt(m.leftCollapse.css('borderLeftWidth'));
                            m.centerLeft += parseInt(m.leftCollapse.css('borderRightWidth'));
                            m.centerLeft += parseInt(m.leftCollapse.css('left'));
                            m.centerLeft += defaults.space;
                        }
                        else {
                            m.centerWidth -= m.leftWidth;
                            m.centerWidth -= parseInt(m.left.css('borderLeftWidth'));
                            m.centerWidth -= parseInt(m.left.css('borderRightWidth'));
                            m.centerWidth -= parseInt(m.left.css('left'));
                            m.centerWidth -= defaults.space;
                            m.centerLeft += m.left.width();
                            m.centerLeft += parseInt(m.left.css('borderLeftWidth'));
                            m.centerLeft += parseInt(m.left.css('borderRightWidth'));
                            m.centerLeft += defaults.space;
                        }

                    }
                    m.center.css({ left: m.centerLeft });
                    m.center.width(m.centerWidth);
                    var contentHeight = m.middleHeight;
                    if (m.center.header) contentHeight -= m.center.header.height();
                    m.center.content.height(contentHeight);
                }
            }
        };
        //        var thisLoyout = $(this);
        //        thisLoyout.width($(window).width() - 10);
        m.layout = $(this);
        if (!m.layout.hasClass("l-layout"))
            m.layout.addClass("l-layout");
        m.width = m.layout.width();
        //left
        if ($("> div[position=left]", m.layout).length > 0) {

            m.left = $("> div[position=left]", m.layout).wrap("<div class='l-layout-left'></div>").parent();
            m.left.header = $("<div class='l-layout-header'><div class='l-layout-header-toggle'></div><div class='l-layout-header-inner'></div> </div> ");
            m.left.prepend(m.left.header);
            m.left.header.toggle = $(".l-layout-header-toggle", m.left.header);
            m.left.menu = $("#leftMenu");
            m.left.content = $("> div[position=left]", m.left);
            if (m.left.content.hasClass("l-layout-content")) {
                m.left.content.addClass("l-layout-content");
            }
            if (!defaults.allowLeftCollapse) {
                $(".l-layout-header-toggle", m.left.header).remove();
            }
            var leftText = m.left.content.attr("Text");
            if (leftText) {
                $(".l-layout-header-inner", m.left.header).html(leftText);
            }
            m.leftWidth = defaults.leftWidth;
            if (m.leftWidth) {
                m.left.width(m.leftWidth);
            }
        }
        //Center
        if ($("> div[position=center]", m.layout).length > 0) {
            m.center = $("> div[position=center]", m.layout).wrap("<div class='l-layout-center'></div>").parent();
            m.center.content = $("> div[position=center]", m.layout);
            m.center.content.addClass("l-layout-content");
        }

        m.isLeftCollapse = false;
        m.layout.lock = $("<div class='l-layout-lock'></div>")
        m.layout.append(m.layout.lock);
        m.leftCollapse = $("<div class='l-layout-collapse-left' style='display: none;'><div class='l-layout-collapse-left-toggle'></div></div>");
        m.leftCollapse.toggle = $("> .l-layout-collapse-left-toggle", m.leftCollapse);
        m.layout.append(m.leftCollapse);
        m.setCollapse();
        m.onInit();
        $(window).resize(function () {
            m.onReSize()
        });
        return m;
    }
})(jQuery)